/*
 *  ui系统的直接赋值设置内容,主要用于初始化
 */
#ifndef _VIEW_INFO_H_
#define _VIEW_INFO_H_

#include "view_callback.h"
#include "view_shape.h"
#include "view_font.h"
#include "view_relative.h"

#include "value.h"

#include <iostream>
using namespace std;

/* 控件初始化项目 */
struct ViewInfo
{
    string name; /* 控件名称,用于报错定位 */

    /* --- 位置范围 ---  */
    int32_t width, height; /* 控件大小,0表示自动,其它拓展赋值定义见 view_relative.h 中 ViewRelativeSize */
    int32_t rObj; /* 相对对象,0表示父控件,其它定义见 view_relative.h 中 ViewRelativeObject */
    uint32_t rType; /* 相对方式,0表示左上角重叠,其它定义见 view_relative.h 中 ViewRelativeType */
    int32_t rErrX, rErrY; /* 相对偏移量,拓展定义见 view_relative.h 中 ViewRelativeSize */

    /* --- 符号标记 --- */
    bool enable;  /* 失能状态时,不接收操作和焦点(默认true) */
    bool visable; /* 失能状态时基础上,增加不可见(默认true) */
    bool overDraw; /* 允许超出父控件范围绘图(默认false) */
    bool enableFocus;   /* 使能被焦点能力(默认false) */
    bool enableOperate; /* 使能被点击操作(默认false) */

    /* --- 控件形状--- */
    ViewShapeType shapeType; /* 形状类型和本体 */
    ViewShape shape;
    uint32_t shapeColor; /* 形状填充颜色,有边框时作为边框颜色 */
    uint32_t shapeColorBg; /* 有边框时作为背景填充颜色 */
    int32_t shapeMarginTop; /* 4个方向上的缩进 */
    int32_t shapeMarginBottom;
    int32_t shapeMarginLeft;
    int32_t shapeMarginRight;

    /* --- 图片填充(自动拉伸到控件大小) --- */
    const char* picture; /* 填充图片文件路径 */
    bool picReplaceEnable; /* 使能图片颜色替换(默认false) */
    uint32_t picReplaceColor; /* 要被替换的颜色 */
    uint32_t picReplaceColorBy; /* 替换成的颜色 */

    /* --- 文本内容 --- */
    Value text;            /* 文本内容 */
    ViewFontType textFont; /* 字体类型,定义见 view_font.h */
    uint32_t textColor;    /* 文本颜色 */
    uint32_t textSize;     /* 文本字体大小,默认值0自动选择 */
    uint32_t textBold;     /* 文字加粗程度 */
    int32_t textDegree;    /* 文字旋转(单位:度) */
    int32_t textSpaceX;    /* 横向间距 */
    int32_t textSpaceY;    /* 纵向间距(行间距) */
    bool textAutoEnter;    /* 自动换行(默认false) */
    bool textAutoScroll;   /* 自动滚动(默认false) */
    bool textCenterX;      /* 横向居中 */
    bool textCenterY;      /* 纵向居中 */
    int32_t textMarginTop; /* 4个方向上的缩进 */
    int32_t textMarginBottom;
    int32_t textMarginLeft;
    int32_t textMarginRight;

    /* --- 事件回调,定义见 view_callback.h --- */
    ViewCallback* viewCallback; /* 回调函数和私有指针 */
    void* priv;

    /* 默认配置在这里定义 */
    ViewInfo(
        string name = "",
        int32_t width = 0,
        int32_t height = 0,
        int32_t rObj = 0,
        int32_t rType = 0);

    /* 快速必要参数配置 */
    void Reset(
        string name = "",
        int32_t width = 0,
        int32_t height = 0,
        int32_t rObj = 0,
        int32_t rType = 0);

    /* 生成crc32码,用于判断是否发生更改 */
    uint32_t Crc32();
};

#endif // _VIEW_INFO_H_
